package com.uc3m.dsic.gestorZoo;

import java.sql.*;

/**
 * En la clase Zoo vienen dados los atributos: id, nombre, ciudad, aforo, pais,
 *  idioma
 * 
 * @author Elena Canales Jimenez
 */
public class Zoo {

    /**
     * Atributo1: id, identificador del zoo.
     */
    private String id;
    /**
     * Atributo2: nombre del zoo.
     */
    private String nombre;
    /**
     * Atributo3: ciudad donde se encuentra el zoo.
     */
    private String ciudad;
    /**
     * Atributo4: aforo del zoo.
     */
    private int aforo;
    /**
     * Atributo5: pais donde se encuentra el zoo.
     */
    private String pais;
    /**
     * Atributo6: idiomas en los que se habla en el zoo.
     */
    private String idioma;
    /**
     *
     */
    private int entradas;

    /**
     * Constructor para crear un nuevo zoo dados los atributos.
     * @param id
     *          id del zoo.
     * @param nombre
     *          nombre del zoo.
     * @param ciudad
     *          ciudad donde esta el zoo.
     * @param aforo
     *          aforo del zoo.
     * @param pais
     *          pais donde se encuentra el zoo.
     * @param idioma
     *          idiomas que se hablan en el zoo.
     */
    public Zoo(String idZ, String nombreZ, String ciudadZ, int aforoZ,
            String paisZ, String idiomaZ, int entradasZ) throws ZooException {
        if (!idZ.contains("'") && !nombreZ.contains("'") && !ciudadZ.contains("'")
                && !paisZ.contains("'") && !idiomaZ.contains("'")) {
            if (aforoZ >= 0) {
                if(entradasZ >= 0){
                    id = idZ;
                    nombre = nombreZ;
                    ciudad = ciudadZ;
                    aforo = aforoZ;
                    pais = paisZ;
                    idioma = idiomaZ;
                    entradas = entradasZ;
                }else {
                    throw new ZooException ("Las entradas vendidas no pueden"
                            + " ser negativas.");
                }
            } else {
                throw new ZooException ("El aforo nunca puede ser negativo.");
            }
        } else {
            throw new ZooException ("No se admite el caracter '. "
                    + "Por favor, modifiquelo");
        }
    }

    //nuevo guille
        public Zoo (java.sql.ResultSet fila) throws ZooException, SQLException{

        if (fila == null){
            throw new ZooException ("La fila esta vacia. No se puede crear "
                    + "un Zoo sin campos en la fila de entrada.");
        }
        if (fila.getMetaData().getColumnCount() != 6){
            throw new ZooException ("La fila no contiene los seis atributos"
                    + " que caracterizan un Zoo: id_zoo,nombre,ciudad,aforo,"
                    + "pais e idioma.\nMirar la tabla "
                    + GestorZooAplicacion.FICHERO_BD + " de la carpeta donde "
                    + "esta instalado esta aplicacion.\nUna fila de la Tabla "
                    + "ZOO debe respetar ese formato.");
        }
        //hasta aqui ok. Se construye el zoo con los seis parametros de
        //la fila
        this.id = fila.getString(1);
        this.nombre = fila.getString(2);
        this.ciudad = fila.getString(3);
        this.aforo = fila.getInt(4);
        this.pais = fila.getString(5);
        this.idioma = fila.getString(6);
        this.entradas = fila.getInt(7);
    }

    /**
     * Metodo que muestra por consola los atributos del zoo.
     */
    public void mostrarZoo() {
        System.out.print("Id:" + id + "\tAforo: " + Integer.toString(aforo)
                + "\tNombre: " + nombre + "\tCiudad: " + ciudad + "\tIdioma: "
                + idioma + "\tEntradas" + entradas + "\n");
    }

    /**
     * Metodo al que se llama para obtener el id del zoo.
     *
     * @return id Identificador de zoo
     */
    public String getId() {
        return id;
    }

    /**
     * Metodo para asignar el id de zoo.
     *
     * @param id
     *          Identificador de zoo
     */
    public void setId(String idZ) {
        id = idZ;
    }

    /**
     * Metodo al que se llama para obtener el nombre del zoo.
     *
     * @return nombre Nomrbe del zoo
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * Metodo para asignar el nombre del zoo.
     *
     * @param nombre
     *          Nombre del zoo
     */
    public void setNombre(String nombreZ) {
        nombre = nombreZ;
    }

    /**
     * Metodo parar asignar/modificar el aforo del zoo.
     *
     * @param aforo
     *          Aforo del zoo
     */
    public void setAforo(int aforoZ) {
        aforo = aforoZ;
    }

    /**
     * Metodo para obtener el aforo de un zoo.
     *
     * @return aforo  Aforo del zoo
     */
    public int getAforo() {
        return aforo;
    }

    /**
     * Para asignar la ciudad donde esta el zoo.
     *
     * @param ciudad
     *          Ciudad del zoo
     */
    public void setCiudad(String ciudadZ) {
        ciudad = ciudadZ;
    }

    /**
     * Para obtener la ciudad en el que esta el zoo .
     *
     * @return ciudad Ciudad del zoo
     */
    public String getCiudad() {
        return ciudad;
    }

    /**
     * Metodo para asignar el pais donde esta el zoo.
     *
     * @param pais
     *          Pais del zoo
     */
    public void setPais(String paisZ) {
        pais = paisZ;
    }

    /**
     * Metodo para obtener el pais donde se encuentra el zoo.
     * @return pais Pais del zoo
     */
    public String getPais() {
        return pais;
    }

    /**
     * Metodo para asignar el idioma que se habla en  el zoo.
     *
     * @param idioma Idioma del zoo
     */
    public void setIdioma(String idiomaZ) {
        idioma = idiomaZ;
    }

    /**
     * Metodo para obtener el idioma que se habla en el zoo.
     *
     * @return idioma Idioma del zoo
     */
    public String getIdioma() {
        return idioma;
    }

    /**
     * Metodo para obtener el numero de entradas de un zoo.
     * @return
     */
    public int getEntradas() {
        return entradas;
    }
    
    /**
     * Metodo para asignar el numero de entradas en un zoo
     *
     * @param entradasZ
     *          Entradas del zoo
     */
    public void setEntradas(int entradasZ) {
        entradas = entradasZ;
    }

    /**
     * Conversor de integer a string.
     *
     * @param parametro
     *          Numero a convertir en cadena de caracteres
     * @return El numero convertido en cadena de caracteres
     */
    public String toString(int parametro){
        String conversion = Integer.toString(parametro);
        return conversion;
    }

    /**
     * Inserción de zoos en la base de datos
     *
     * @throws Exception
     */
    public void insertarZoo() throws Exception {
        GestorZooInterface izoo = new GestorZooAplicacion();
        String inserta = "INSERT INTO ZOO VALUES";
        String parametros[] = {id.trim().toUpperCase(),
                nombre.trim().toUpperCase(), ciudad.trim().toUpperCase(),
                this.toString(aforo).trim().toUpperCase(),
                pais.trim().toUpperCase(), idioma.trim().toUpperCase(),
                this.toString(entradas).trim().toUpperCase()};
        izoo.actualiza(inserta, parametros);
        izoo.cerrarBD();
    }

    /**
     * Borrado de un ticket de la base de datos a partir del identificador del
     * Zoo y del tipo del ticket.
     *
     * @throws Exception
     */
    public void borrarZoo() throws Exception {
        GestorZooInterface izoo = new GestorZooAplicacion();
        izoo.actualiza("DELETE FROM ZOO WHERE Id_Zoo = '" 
                + id.trim().toUpperCase() + "';");
        izoo.cerrarBD();
    }
}
